package com.network.bio;

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class BioServer {
    public static void main(String[] args) {
        try(ServerSocket serverSocket = new ServerSocket(8080);){
            while (true){
                Socket socket = serverSocket.accept();
                InputStream inputStream =  socket.getInputStream();
                byte[] buffer = new byte[1024];
                int len;
                // 关键在于inputStream.read()这个函数，是直接对内核发起读取socket请求。
                // 内核对于socket默认是阻塞的，当网络IO没有准备就绪或者写入失败时，会直接将线程挂起。
                // 对于java一对一的线程模型而言，java对应的用户线程也会挂起。
                while((len = inputStream.read(buffer)) != -1){
                    String message = new String(buffer,0,len);
                    System.out.println("Received message: "+message);
                }
                System.out.println("Client disconnected");
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}
